#!/usr/bin/python
# -*- coding: utf8 -*-

from copy import copy
from pyinmune.estado import EstadoMuerto

class Agente(object):
    
    def __init__(self, estado_inicial, caracteristicas):
        # Al final hace falta esto?
        self.caracteristicas = copy(caracteristicas)
        self.estado = estado_inicial
        self.estado.add(self)
        self.inicializar()
        self.vacunas = []
        self.vacunado = False

        self.aislado = False
        self.iteracionesEnEstado=0
        
    def __getitem__(self, attr):
        return self.caracteristicas[attr]

    def __setitem__(self, attr, value):
        self.caracteristicas[attr] = value

    def cambiarEstado(self, estado_nuevo):
        self.estado.remove(self)
        estado_nuevo.add(self)
        self.estado = estado_nuevo
        self.iteracionesEnEstado = 0

    def _terminarIteracion(self):
        self.iteracionesEnEstado += 1
        if not self.estado == EstadoMuerto:
            self.terminarIteracion()

    def terminarIteracion(self):
        pass
    
    def inicializar(self):
        pass
    
    
    def _encontrarseCon(self, otro, peso):
        if not self.estado == EstadoMuerto and not otro.estado == EstadoMuerto:
            if not self.aislado and not otro.aislado:    
                self.encontrarseCon(otro,peso)
        
    
    def encontrarseCon(self, otro, peso):
        raise NotImplementedError


